/*
 * debug.h
 *
 *  Created on: 2021年7月25日
 *      Author: Administrator
 */

#ifndef __DEBUG_H_
#define __DEBUG_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>

//调试输出等级
//需要用户在包含此文件前定义DEBUG_LEVEL，若未定义则默认为WARNING_OUTPUT
#define DEBUG_OUTPUT    3
#define INFO_OUTPUT     2
#define WARNING_OUTPUT  1
#define ERROR_OUTPUT    0

#ifndef DEBUG_LEVEL
#define DEBUG_LEVEL     WARNING_OUTPUT
#endif

#ifndef DEBUG_TAG
#define DEBUG_TAG   "DBG"
#endif

//此写法支持c++
#define DBG_LOG_LINE(lvl_name, fmt, ...)                                \
do{                                                                     \
    printf("[");                                                        \
    printf(lvl_name);                                                   \
    printf("/");                                                        \
    printf(DEBUG_TAG);                                                  \
    printf("]");                                                        \
    printf(fmt,  ##__VA_ARGS__);                                        \
    printf("\r\n");                                                     \
}while(0)


#if (DEBUG_LEVEL >= DEBUG_OUTPUT)
#define LOG_D(fmt, ...)     DBG_LOG_LINE("D", fmt, ##__VA_ARGS__)
#else
#define LOG_D(...)
#endif

#if (DEBUG_LEVEL >= INFO_OUTPUT)
#define LOG_I(fmt, ...)     DBG_LOG_LINE("I", fmt, ##__VA_ARGS__)
#else
#define LOG_I(...)
#endif

#if (DEBUG_LEVEL >= WARNING_OUTPUT)
#define LOG_W(fmt, ...)     DBG_LOG_LINE("W", fmt, ##__VA_ARGS__)
#else
#define LOG_W(...)
#endif

#if (DEBUG_LEVEL >= ERROR_OUTPUT)
#define LOG_E(fmt, ...)     DBG_LOG_LINE("E", fmt, ##__VA_ARGS__)
#else
#define LOG_E(...)
#endif

#ifdef __cplusplus
}
#endif

#endif /* __DEBUG_H_ */
